const Koa=require('koa')
const Router=require('./routers/index')
// koa-views配置模板引擎
const views=require('koa-views')
const path=require('path')
// 处理静态资源（如本地图片）
const static=require('koa-static')
const mongoose=require('mongoose')
// 引入配置项
const CONFIG=require('./config/config')
const session=require('koa-session')
const bodyParser=require('koa-bodyparser')
// 引入中间件
const flash=require('./middlewares/flash')

// 建立数据库连接(本地mongodb)
mongoose.connect(CONFIG.mongodb,(err,info)=>{
    // console.log(info);
    if(!err){
        console.log('数据库连接成功');
    }
})

const app=new Koa()

// 创建session存储
app.keys=['something'] 
// 开启session存储
app.use(session({
    key:CONFIG.session.key,
    maxAge:CONFIG.session.maxAge
},app))

// 启用模板引擎(尽量使用绝对路径)
app.use(views(path.resolve(__dirname,'views'),{
    //保证render()函数渲染的就是html文件（而不是其他后缀的文件），nunjucks可以创建html后缀的文件
    map:{html:'nunjucks'}
}))
app.use(static(path.join(__dirname,'public')))
// 将Router参数传入app,以便ctx的使用

app.use(bodyParser())

// 这个函数存在，让flash()函数每次执行的时候都会重新执行
app.use(async (ctx,next)=>{
    ctx.state.ctx=ctx
    await next()
})
app.use(flash())
Router(app)

app.listen(3030,()=>{
    console.log('server is running at http://localhost:3030');
})